Spring RESTful Web Services হল স্প্রিং ফ্রেমওয়ার্কের একটি গুরুত্বপূর্ণ অংশ, যা REST (Representational State Transfer) এর উপর ভিত্তি করে ওয়েব সার্ভিস তৈরি করতে সহায়তা করে। RESTful ওয়েব সার্ভিস হল একটি আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিসগুলির মধ্যে সিম্পল, স্কেলেবল এবং লাইটওয়েট যোগাযোগ নিশ্চিত করে, যেখানে HTTP প্রোটোকল ব্যবহার করে ডেটা ট্রান্সফার করা হয়। Spring Web MVC এবং Spring Boot সহ স্প্রিং ফ্রেমওয়ার্কে RESTful ওয়েব সার্ভিস তৈরির জন্য বিভিন্ন টুলস এবং কনফিগারেশন মডিউল প্রদান করা হয়।
এই টিউটোরিয়ালে আমরা দেখব কীভাবে স্প্রিং ব্যবহার করে RESTful Web Services তৈরি করা যায় এবং বিভিন্ন HTTP মেথড যেমন GET, POST, PUT, DELETE ইত্যাদি দিয়ে ডেটা পরিচালনা করা যায়।
REST একটি আর্কিটেকচারাল স্টাইল যা HTTP প্রোটোকল ব্যবহার করে সিস্টেমের মধ্যে কমিউনিকেশন স্থাপন করতে সহায়তা করে। এটি সাধারণত স্টেটলেস এবং ক্লায়েন্ট-সার্ভার আর্কিটেকচার অনুসরণ করে, এবং এর প্রধান বৈশিষ্ট্যগুলোর মধ্যে:
স্প্রিং Spring MVC এবং Spring Boot এর মাধ্যমে সহজে RESTful ওয়েব সার্ভিস তৈরি করা সম্ভব। স্প্রিং রেস্টফুল ওয়েব সার্ভিস তৈরি করতে @RestController, @RequestMapping, এবং @PathVariable সহ অন্যান্য অ্যানোটেশন ব্যবহার করা হয়।
প্রথমে একটি স্প্রিং বুট প্রজেক্ট তৈরি করুন এবং প্রয়োজনীয় ডিপেনডেন্সি যুক্ত করুন। আপনি Spring Initializr ব্যবহার করতে পারেন, অথবা মেভেন (Maven) দিয়ে প্রজেক্ট তৈরি করতে পারেন। প্রয়োজনীয় ডিপেনডেন্সি:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
এই ডিপেনডেন্সিগুলি স্প্রিং বুট ওয়েব সার্ভিসের জন্য প্রয়োজনীয় সমস্ত লাইব্রেরি সরবরাহ করবে।
এখন আমরা একটি RESTful Controller তৈরি করব যা HTTP রিকোয়েস্টগুলির জন্য বিভিন্ন মেথড হ্যান্ডল করবে।
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController // Marks the class as a REST controller
@RequestMapping("/api/v1/employees") // Base URI for the employee API
public class EmployeeController {
@GetMapping("/{id}")
public String getEmployee(@PathVariable("id") int id) {
return "Employee ID: " + id; // Return a simple message
}
@GetMapping("/")
public String getAllEmployees() {
return "List of all employees"; // Return a list of all employees
}
}
এখানে:
id
) গ্রহণ করার জন্য ব্যবহৃত হয়েছে।স্প্রিং RESTful ওয়েব সার্ভিসে বিভিন্ন HTTP মেথডের (GET, POST, PUT, DELETE) জন্য রিকোয়েস্ট হ্যান্ডলিং করা যায়।
package com.example.demo.controller;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/v1/employees")
public class EmployeeController {
@GetMapping("/{id}")
public String getEmployee(@PathVariable("id") int id) {
return "Employee ID: " + id;
}
@PostMapping("/")
public String addEmployee(@RequestBody Employee employee) {
// Simulating adding an employee to the database
return "Employee added: " + employee.getName();
}
@PutMapping("/{id}")
public String updateEmployee(@PathVariable("id") int id, @RequestBody Employee employee) {
// Simulating updating the employee
return "Employee with ID " + id + " updated to: " + employee.getName();
}
@DeleteMapping("/{id}")
public String deleteEmployee(@PathVariable("id") int id) {
// Simulating deleting an employee
return "Employee with ID " + id + " deleted";
}
}
public class Employee {
private String name;
private int age;
private String position;
// Getters and setters
public Employee(String name, int age, String position) {
this.name = name;
this.age = age;
this.position = position;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
এখানে:
স্প্রিং RESTful ওয়েব সার্ভিসে তৈরি করা API টেস্ট করতে আপনি Postman বা curl টুল ব্যবহার করতে পারেন।
http://localhost:8080/api/v1/employees/1
"Employee ID: 1"
http://localhost:8080/api/v1/employees/
{ "name": "John", "age": 30, "position": "Manager" }
"Employee added: John"
স্প্রিং বুট স্প্রিং রেস্টফুল ওয়েব সার্ভিস তৈরি করার জন্য একটি সহজ এবং দ্রুত উপায় প্রদান করে। এটি কনফিগারেশন ফাইল এবং কম্প্লেক্স সেটআপ থেকে মুক্তি দেয় এবং অটোমেটিক কনফিগারেশন, এম্বেডেড সার্ভার (Tomcat বা Jetty) ব্যবহারের মাধ্যমে দ্রুত ডেভেলপমেন্ট প্রদান করে।
স্প্রিং বুটের সাহায্যে আপনি সরাসরি REST API তৈরি করতে পারেন, এবং সেটি চলানোর জন্য শুধুমাত্র @SpringBootApplication অ্যানোটেশন ব্যবহার করলেই চলবে।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
এখানে @SpringBootApplication অ্যানোটেশনটি স্প্রিং বুট অ্যাপ্লিকেশনকে চালু করে এবং সমস্ত কনফিগারেশন ও অটোমেটিক সেটআপের কাজ করে।
স্প্রিং RESTful ওয়েব সার্ভিস Spring MVC বা Spring Boot ব্যবহার করে সহজেই তৈরি করা যেতে পারে। Spring RESTful Web Services স্প্রিং কন্ট্রোলার এবং অ্যানোটেশন ব্যবহারের মাধ্যমে HTTP রিকোয়েস্ট হ্যান্ডলিং, ডেটা রিটার্ন এবং HTTP মেথড পরিচালনা করতে
RESTful Web Services হল একটি আর্কিটেকচারাল স্টাইল যা REST (Representational State Transfer) এর উপর ভিত্তি করে তৈরি। এটি ওয়েব অ্যাপ্লিকেশন এবং ক্লায়েন্টের মধ্যে ডেটা ট্রান্সফার করার জন্য HTTP প্রোটোকল ব্যবহৃত করে। RESTful Web Services সাধারণত JSON বা XML ফরম্যাটে ডেটা রিটার্ন করে এবং ক্লায়েন্ট-সার্ভার আর্কিটেকচারে কাজ করে। RESTful Web Services বেশ জনপ্রিয় কারণ এটি হালকা, স্কেলেবল এবং সহজে ইন্টিগ্রেট করা যায়।
স্প্রিং ফ্রেমওয়ার্কে RESTful Web Services তৈরি করতে Spring Web মডিউল এবং Spring Boot ব্যবহার করা হয়। স্প্রিং @RestController
এবং @RequestMapping
অ্যানোটেশন দিয়ে RESTful API তৈরি করা যায়। স্প্রিং বুট এবং স্প্রিং ওয়েব ব্যবহার করে RESTful Web Services তৈরি করা অনেক সহজ এবং দ্রুত হয়।
প্রথমে, Spring Boot ব্যবহার করে একটি প্রকল্প তৈরি করতে হবে। Spring Initializr (https://start.spring.io) এর মাধ্যমে সহজেই স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করা যেতে পারে।
প্রজেক্টের ডিপেনডেন্সি হিসেবে নিচের মডিউলগুলো নির্বাচন করুন:
স্প্রিং বুট অ্যাপ্লিকেশনে RESTful Web Service তৈরি করতে @RestController
এবং @RequestMapping
অ্যানোটেশন ব্যবহার করা হয়। নিচে একটি উদাহরণ দেয়া হলো:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class HelloWorldController {
@GetMapping("/hello")
public String helloWorld() {
return "Hello, World!";
}
}
এখানে:
@RestController
: এটি স্প্রিং অ্যাপ্লিকেশনে একটি RESTful API কন্ট্রোলার ক্লাসকে চিহ্নিত করে।@RequestMapping("/api")
: এটি URL পাথের বেস অংশ হিসেবে /api
নির্ধারণ করে।@GetMapping("/hello")
: এটি HTTP GET রিকোয়েস্টের জন্য /api/hello
এ একটি মেথড ম্যাপ করে, এবং এই রিকোয়েস্টে "Hello, World!" রেসপন্স ফেরত পাঠায়।স্প্রিং বুট অ্যাপ্লিকেশন চালু করার জন্য @SpringBootApplication
অ্যানোটেশন সহ একটি main মেথড তৈরি করা হয়।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RestApplication {
public static void main(String[] args) {
SpringApplication.run(RestApplication.class, args);
}
}
এখানে, SpringApplication.run()
মেথড স্প্রিং বুট অ্যাপ্লিকেশন চালু করে।
অ্যাপ্লিকেশন চালু করার পর, আপনি ওয়েব ব্রাউজার বা পোস্টম্যান (Postman) ব্যবহার করে http://localhost:8080/api/hello
এই URL এ GET রিকোয়েস্ট পাঠাতে পারেন এবং "Hello, World!" রেসপন্স দেখতে পাবেন।
RESTful Web Services সাধারণত JSON ফরম্যাটে ডেটা রিটার্ন করে। আপনি চাইলে @GetMapping
এর মাধ্যমে JSON অবজেক্ট রিটার্ন করতে পারেন।
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public User getUser() {
return new User("John", "Doe", 30);
}
// User class
static class User {
private String firstName;
private String lastName;
private int age;
public User(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
// Getters and setters
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}
এখানে, User
অবজেক্টটি JSON ফরম্যাটে রিটার্ন হবে:
{
"firstName": "John",
"lastName": "Doe",
"age": 30
}
স্প্রিং RESTful Web Services তে POST, PUT, DELETE রিকোয়েস্টও হ্যান্ডল করা যায়। নিচে POST এবং PUT রিকোয়েস্ট হ্যান্ডল করার উদাহরণ দেয়া হলো।
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/user")
public User createUser(@RequestBody User user) {
// Save user to database or perform some operation
return user;
}
}
এখানে, @RequestBody
অ্যানোটেশন ব্যবহার করে ক্লায়েন্টের পাঠানো JSON ডেটা User
অবজেক্টে কনভার্ট করা হচ্ছে।
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PutMapping("/user/{id}")
public User updateUser(@PathVariable int id, @RequestBody User user) {
// Update user data based on the id
return user;
}
}
এখানে, @PathVariable
এবং @RequestBody
ব্যবহার করে URL পাথের মধ্যে পাঠানো id এবং ক্লায়েন্টের পাঠানো JSON ডেটা দিয়ে User আপডেট করা হচ্ছে।
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@DeleteMapping("/user/{id}")
public String deleteUser(@PathVariable int id) {
// Delete user by id
return "User with ID " + id + " deleted successfully.";
}
}
এখানে, @DeleteMapping
অ্যানোটেশন দিয়ে DELETE রিকোয়েস্ট হ্যান্ডল করা হচ্ছে এবং ইউজারের ID ব্যবহার করে ডেটাবেস থেকে মুছে ফেলা হচ্ছে।
Spring RESTful Web Services দ্রুত এবং কার্যকরীভাবে REST API তৈরি করতে সহায়তা করে। স্প্রিং @RestController
, @RequestMapping
, @GetMapping
, @PostMapping
, @PutMapping
, @DeleteMapping
এবং অন্যান্য অ্যানোটেশন ব্যবহার করে ডেটাবেস অপারেশন (CRUD) এবং অন্যান্য ওয়েব রিকোয়েস্ট হ্যান্ডলিং করা যায়। স্প্রিং বুট ব্যবহার করলে RESTful API আরও সহজে এবং দ্রুত ডেভেলপ করা সম্ভব, কারণ এতে অটো-কনফিগারেশন, এমবেডেড সার্ভার এবং স্টার্টার প্যাকেজ সমর্থন থাকে।
স্প্রিং ফ্রেমওয়ার্কে @RestController এবং @RequestMapping অ্যানোটেশন দুটি গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে RESTful web services তৈরি করার জন্য। এই দুটি অ্যানোটেশন স্প্রিং মডিউল Spring MVC এবং Spring Boot এর অংশ হিসেবে ব্যবহার করা হয় এবং তাদের মাধ্যমে ওয়েব অ্যাপ্লিকেশন বা API তৈরি করা অনেক সহজ হয়ে যায়।
স্প্রিং @RestController একটি বিশেষ ধরনের কন্ট্রোলার অ্যানোটেশন যা @Controller এবং @ResponseBody অ্যানোটেশনের সংমিশ্রণ। এটি স্প্রিং MVC এর মধ্যে একটি রেস্টফুল কন্ট্রোলার তৈরি করার জন্য ব্যবহৃত হয়। যখন @RestController ব্যবহার করা হয়, তখন প্রতিটি মেথডের রিটার্ন ভ্যালু সরাসরি HTTP Response Body হিসেবে ক্লায়েন্টে পাঠানো হয়, এবং অতিরিক্ত view rendering বা model object rendering প্রয়োজন হয় না।
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/users")
public String getUsers() {
return "List of users"; // This will be returned as the HTTP response body
}
}
ব্যাখ্যা:
@RequestMapping একটি সাধারণ এবং শক্তিশালী অ্যানোটেশন যা স্প্রিং মডিউলে HTTP রিকোয়েস্ট (যেমন GET, POST, PUT, DELETE) এর সাথে মেথডকে ম্যাপ করার জন্য ব্যবহৃত হয়। এটি সাধারণত স্প্রিং কন্ট্রোলার ক্লাসে ব্যবহার করা হয় যাতে HTTP রিকোয়েস্টের বিভিন্ন ধরণকে কন্ট্রোলার মেথডে ম্যাপ করা যায়।
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@RequestMapping("/hello")
public String sayHello() {
return "Hello, Spring!";
}
}
ব্যাখ্যা:
স্প্রিং @RequestMapping অ্যানোটেশনটি বিভিন্ন HTTP মেথডের সাথে কাজ করতে পারে, কিন্তু স্প্রিং 4.3 থেকে @GetMapping, @PostMapping, @PutMapping, @DeleteMapping ইত্যাদি অ্যানোটেশন যোগ করা হয়েছে যা স্পেসিফিক HTTP মেথডের জন্য আরও পরিষ্কারভাবে কাজ করে।
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
// Handles GET requests
@GetMapping("/users")
public String getUsers() {
return "Returning list of users (GET request)";
}
// Handles POST requests
@PostMapping("/users")
public String createUser() {
return "Creating a new user (POST request)";
}
}
এখানে:
@RequestMapping এর মাধ্যমে URL প্যারামিটার এবং HTTP হেডারও পাঠানো যেতে পারে। নিচে এর উদাহরণ দেওয়া হলো:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@RequestMapping("/users")
public String getUserById(@RequestParam int id) {
return "Fetching user with ID: " + id;
}
}
এখানে:
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@RequestMapping("/users")
public String getUserByHeader(@RequestHeader("User-Agent") String userAgent) {
return "User-Agent is: " + userAgent;
}
}
এখানে:
স্প্রিং ফ্রেমওয়ার্কে @RestController এবং @RequestMapping অ্যানোটেশন দুটি গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে RESTful Web Services তৈরি করতে।
এটি স্প্রিং মডিউলে ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য খুবই গুরুত্বপূর্ণ এবং ব্যবহারে সুবিধাজনক।
Spring Framework ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যাপকভাবে ব্যবহৃত হয় এবং HTTP মেথড (GET, POST, PUT, DELETE) এর সাথে কাজ করার জন্য এটি শক্তিশালী ফিচার সরবরাহ করে। Spring Web MVC একটি অবিচ্ছেদ্য অংশ এবং এটি JSON এবং XML রেসপন্স হ্যান্ডল করার জন্য সুবিধা প্রদান করে। Web services এবং RESTful APIs তৈরি করার ক্ষেত্রে এই ফিচারগুলি বিশেষভাবে গুরুত্বপূর্ণ। এই টিউটোরিয়ালে আমরা HTTP Methods (GET, POST, PUT, DELETE) এবং JSON/XML রেসপন্স নিয়ে আলোচনা করব।
HTTP (HyperText Transfer Protocol) মেথডগুলি হল ওয়েব সার্ভারের সাথে ক্লায়েন্ট (যেমন ব্রাউজার বা অ্যাপ্লিকেশন) এর মধ্যে যোগাযোগের জন্য ব্যবহৃত পদ্ধতি। Spring Web MVC-এ এই HTTP মেথডগুলি ব্যবহার করা হয় RESTful APIs তৈরি করতে। প্রধান HTTP মেথডগুলি হল:
Spring Web MVC এ এই HTTP মেথডগুলির জন্য মডেল এবং কন্ট্রোলার মেথড তৈরি করা হয় যা HTTP রিকোয়েস্ট অনুযায়ী কাজ করে।
GET মেথড HTTP রিকোয়েস্টে ডেটা রিড করতে ব্যবহৃত হয়। এটি সাধারণত ডেটা রিট্রিভ (retrieve) করার জন্য ব্যবহার করা হয়, এবং সার্ভারে কোনো পরিবর্তন (state) করে না।
package com.example.controller;
import com.example.model.Employee;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmployeeController {
// GET request to fetch employee data by ID
@GetMapping("/employees/{id}")
public Employee getEmployee(@PathVariable Long id) {
// Example: Fetch employee by ID from database or repository
return new Employee(id, "John Doe", "Developer");
}
}
এখানে, @GetMapping অ্যানোটেশন GET রিকোয়েস্ট হ্যান্ডল করার জন্য ব্যবহৃত হয়েছে এবং @PathVariable এর মাধ্যমে URL থেকে প্যারামিটার (id
) আনা হচ্ছে।
POST মেথড নতুন ডেটা তৈরি (create) করার জন্য ব্যবহৃত হয়। এটি সাধারণত ফর্ম ডেটা বা JSON/XML রিকোয়েস্ট বডি পাঠানোর জন্য ব্যবহার করা হয়।
package com.example.controller;
import com.example.model.Employee;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmployeeController {
// POST request to add a new employee
@PostMapping("/employees")
public String addEmployee(@RequestBody Employee employee) {
// Example: Add employee to database or repository
return "Employee added: " + employee.getName();
}
}
এখানে, @PostMapping অ্যানোটেশন POST রিকোয়েস্ট হ্যান্ডল করার জন্য ব্যবহৃত হয়েছে এবং @RequestBody এর মাধ্যমে JSON বা XML রিকোয়েস্ট বডি ডেসিরিয়ালাইজ (deserialize) করা হচ্ছে।
PUT মেথড বিদ্যমান ডেটা আপডেট (update) করার জন্য ব্যবহৃত হয়। এটি সাধারনত ডেটার সম্পূর্ণ পরিবর্তন করার জন্য ব্যবহার করা হয়।
package com.example.controller;
import com.example.model.Employee;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmployeeController {
// PUT request to update an existing employee
@PutMapping("/employees/{id}")
public String updateEmployee(@PathVariable Long id, @RequestBody Employee employee) {
// Example: Update employee in database or repository
return "Employee updated: " + employee.getName();
}
}
এখানে, @PutMapping অ্যানোটেশন PUT রিকোয়েস্ট হ্যান্ডল করার জন্য ব্যবহৃত হয়েছে এবং @RequestBody এর মাধ্যমে আপডেট ডেটা (JSON/XML) গ্রহণ করা হচ্ছে।
DELETE মেথড একটি রিসোর্স মুছে ফেলতে (delete) ব্যবহৃত হয়। এটি সাধারণত ডেটাবেস থেকে কোনো ডেটা মুছে ফেলার জন্য ব্যবহার করা হয়।
package com.example.controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmployeeController {
// DELETE request to delete employee by ID
@DeleteMapping("/employees/{id}")
public String deleteEmployee(@PathVariable Long id) {
// Example: Delete employee from database or repository
return "Employee deleted with id: " + id;
}
}
এখানে, @DeleteMapping অ্যানোটেশন DELETE রিকোয়েস্ট হ্যান্ডল করার জন্য ব্যবহৃত হয়েছে এবং @PathVariable এর মাধ্যমে URL থেকে id
প্যারামিটার নেওয়া হচ্ছে।
Spring Web MVC অ্যাপ্লিকেশন JSON এবং XML ফরম্যাটে রেসপন্স পাঠাতে সক্ষম। Spring Boot এর মাধ্যমে রেসপন্স কনভার্সন সহজ হয়, কারণ Spring Boot অটোমেটিকভাবে Jackson (JSON) অথবা JAXB (XML) লাইব্রেরি ব্যবহারের মাধ্যমে ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করে।
Spring Framework বা Spring Boot এর মাধ্যমে একটি ক্লাস থেকে JSON রেসপন্স পাঠানো সহজ।
package com.example.model;
public class Employee {
private Long id;
private String name;
private String position;
// Constructor, Getters, Setters
public Employee(Long id, String name, String position) {
this.id = id;
this.name = name;
this.position = position;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getPosition() {
return position;
}
}
এখন, Spring RestController থেকে JSON রেসপন্স পাওয়া যাবে। যখন GET রিকোয়েস্ট করা হবে, তখন Employee অবজেক্ট JSON আউটপুট হিসেবে রিটার্ন হবে।
{
"id": 1,
"name": "John Doe",
"position": "Developer"
}
Spring Boot XML রেসপন্সও সমর্থন করে, কিন্তু XML রেসপন্সের জন্য আপনি Jackson XML বা JAXB লাইব্রেরি ব্যবহার করতে হবে।
<Employee>
<id>1</id>
<name>John Doe</name>
<position>Developer</position>
</Employee>
application/json
, application/xml
)।application/json
, application/xml
)।Spring MVC অটোমেটিকভাবে এই হেডারগুলি অনুযায়ী রেসপন্স কনভার্সন করে, যা ডেভেলপারদের জন্য সুবিধাজনক।
@GetMapping("/employees/{id}")
public ResponseEntity<Employee> getEmployee(@PathVariable Long id) {
Employee employee = new Employee(id, "John Doe", "Developer");
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.body(employee);
}
এখানে, ResponseEntity ব্যবহার করা হয়েছে যাতে কাস্টম Content-Type হেডার সেট করা যায়।
Spring Web MVC এবং Spring Boot ব্যবহার করে আপনি HTTP মেথড (GET, POST, PUT, DELETE) এর মাধ্যমে ডেটা পরিচালনা করতে পারেন এবং JSON বা XML রেসপন্স প্রদান করতে পারেন। Spring Framework JSON এবং XML রেসপন্স হ্যান্ডল করার জন্য Jackson এবং JAXB লাইব্রেরি ব্যবহার করে এবং @RestController, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping অ্যানোটেশন ব্যবহার করে HTTP মেথডগুলো সহজভাবে ম্যানেজ করতে পারেন। Spring Boot অটোকনফিগারেশন এবং সহজ কনফিগারেশন ব্যবস্থার মাধ্যমে এই কার্যাবলী আরও সহজ করে তোলে।
Spring RESTful Web Services হল একটি RESTful (Representational State Transfer) API তৈরি করার একটি শক্তিশালী উপায় যা Spring Framework-এর উপর ভিত্তি করে কাজ করে। RESTful Web Services একটি সহজ, স্কেলেবল এবং ফাস্ট ওয়েব সার্ভিস যা HTTP প্রোটোকলের মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করে। Spring RESTful Web Services তৈরি করতে Spring Boot একটি জনপ্রিয় এবং সহজ উপায়।
এই গাইডে আমরা Spring Boot ব্যবহার করে RESTful Web Services তৈরি করার একটি উদাহরণ দেখব।
Spring RESTful Web Service তৈরি করতে প্রথমে Spring Boot প্রকল্প তৈরি করতে হবে। আপনি Spring Initializr ব্যবহার করে খুব সহজে Spring Boot প্রকল্প তৈরি করতে পারেন।
Maven Project
বা Gradle Project
নির্বাচন করুন।Java
নির্বাচন করুন।Spring Web
নির্বাচন করুন।.zip
ফাইল ডাউনলোড করুন।.zip
ফাইলটি এক্সট্র্যাক্ট করুন এবং IDE (যেমন IntelliJ IDEA, Eclipse) তে ওপেন করুন।Spring Boot প্রজেক্টে Spring Web
ডিপেনডেন্সি যোগ করার মাধ্যমে RESTful ওয়েব সার্ভিস তৈরি করা যাবে।
pom.xml
কনফিগারেশন<dependencies>
<!-- Spring Boot Starter Web for building RESTful web services -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Test for testing RESTful API -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
build.gradle
কনফিগারেশনdependencies {
// Spring Boot Starter Web for building RESTful web services
implementation 'org.springframework.boot:spring-boot-starter-web'
// Spring Boot Starter Test for testing RESTful API
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Spring Boot অ্যাপ্লিকেশন তৈরির জন্য @SpringBootApplication
অ্যানোটেশন ব্যবহার করা হয়।
@SpringBootApplication
public class SpringBootRestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootRestApplication.class, args);
}
}
এটি Spring Boot অ্যাপ্লিকেশন চালু করার জন্য main()
মেথড। @SpringBootApplication
অ্যানোটেশন Spring Boot অ্যাপ্লিকেশন কনফিগারেশন এবং রান করার জন্য প্রয়োজনীয় কম্পোনেন্টদের সক্রিয় করে।
Spring RESTful Web Service তৈরি করার জন্য একটি REST Controller তৈরি করতে হবে যা @RestController
অ্যানোটেশন দিয়ে চিহ্নিত হবে। @RequestMapping
, @GetMapping
, @PostMapping
, @PutMapping
, @DeleteMapping
ইত্যাদি HTTP মেথডকে মডেল করে। এখানে একটি উদাহরণ দেওয়া হলো:
@RestController
@RequestMapping("/api/v1")
public class PersonController {
// Sample data (In a real-world app, this would come from a database)
private static final List<Person> persons = Arrays.asList(
new Person(1L, "John Doe", 30),
new Person(2L, "Jane Smith", 25)
);
// GET /api/v1/persons - Retrieve all persons
@GetMapping("/persons")
public List<Person> getAllPersons() {
return persons;
}
// GET /api/v1/person/{id} - Retrieve a person by ID
@GetMapping("/person/{id}")
public ResponseEntity<Person> getPersonById(@PathVariable Long id) {
return persons.stream()
.filter(person -> person.getId().equals(id))
.findFirst()
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.notFound().build());
}
// POST /api/v1/person - Create a new person
@PostMapping("/person")
public ResponseEntity<Person> createPerson(@RequestBody Person person) {
// Here, you would normally save the person to a database
return ResponseEntity.status(HttpStatus.CREATED).body(person);
}
// PUT /api/v1/person/{id} - Update an existing person
@PutMapping("/person/{id}")
public ResponseEntity<Person> updatePerson(@PathVariable Long id, @RequestBody Person person) {
// Update logic here (normally with database)
person.setId(id);
return ResponseEntity.ok(person);
}
// DELETE /api/v1/person/{id} - Delete a person by ID
@DeleteMapping("/person/{id}")
public ResponseEntity<Void> deletePerson(@PathVariable Long id) {
// Delete logic here (normally with database)
return ResponseEntity.noContent().build();
}
}
এখানে:
@RestController
: এটি Spring MVC এর একটি অ্যানোটেশন যা ক্লাসটিকে RESTful ওয়েব সার্ভিস হিসেবে চিহ্নিত করে।@RequestMapping
: এটি রুট URL এর জন্য ব্যবহার করা হয় (এখানে /api/v1
রুট URL দেওয়া হয়েছে)।@GetMapping
: এটি HTTP GET মেথডের জন্য ব্যবহৃত হয় (যেমন ডেটা রিড করা)।@PostMapping
: এটি HTTP POST মেথডের জন্য ব্যবহৃত হয় (যেমন ডেটা তৈরি করা)।@PutMapping
: এটি HTTP PUT মেথডের জন্য ব্যবহৃত হয় (যেমন ডেটা আপডেট করা)।@DeleteMapping
: এটি HTTP DELETE মেথডের জন্য ব্যবহৃত হয় (যেমন ডেটা মুছে ফেলা)।public class Person {
private Long id;
private String name;
private int age;
// Constructors, getters, setters
public Person(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
এখানে Person
ক্লাসটি একটি ডোমেইন মডেল হিসেবে কাজ করছে, যা প্রতিটি Person
অবজেক্টের তথ্য ধারণ করে।
Spring Boot অ্যাপ্লিকেশনটি রান করার পর, আপনি Postman বা CURL-এর মাধ্যমে API টেস্ট করতে পারেন। নিচে কিছু উদাহরণ দেওয়া হলো:
URL: http://localhost:8080/api/v1/persons
URL: http://localhost:8080/api/v1/person/1
URL: http://localhost:8080/api/v1/person
Request Body:
{
"name": "Alice Brown",
"age": 28
}
URL: http://localhost:8080/api/v1/person/1
Request Body:
{
"id": 1,
"name": "John Doe Updated",
"age": 31
}
URL: http://localhost:8080/api/v1/person/1
Spring RESTful Web Services Spring Boot-এর একটি অত্যন্ত শক্তিশালী বৈশিষ্ট্য, যা দ্রুত RESTful API তৈরি এবং পরিচালনা করতে সাহায্য করে। Spring Data JPA বা অন্যান্য ডেটাবেস ইন্টিগ্রেশন ব্যবহার করে REST API গুলিকে ডেটা ম্যানিপুলেট করা যায়। Spring Boot এর @RestController
, @RequestMapping
, @GetMapping
, @PostMapping
, @PutMapping
, @DeleteMapping
এর মাধ্যমে সহজে RESTful API তৈরি এবং পরিচালনা করা যায়, যা JSON ফর্ম্যাটে ডেটা আদান-প্রদান করতে সক্ষম।
Read more